TL/1・MZ ――――――――――――――――――――――――――――――――――――――― アスキー 1981年 3月号掲載 マシン語 01200H−02AFFH S:01200H 起動方法 モニタからロード コールド・スタート 01200H ホット ・スタート 01202H ――――――――――――――――――――――――――――――――――――――― TL/1・MZコンパイラを発表します。 最少の20Kシステムでも御利用出来る様に考慮されております。 1200Hがコールドエントリーで、 1202Hがウォームエントリーです。 コールドエントリでは、実装されているRAM容量チェックし、 テキスト開始番地を5000Hにして、テキストをクリアします。 これらの一連の作業が終ると 「*READY.」 と表示し入力待ちとなります。 このTL/1・MZは満足なモニタを持たないMZの為に、 モニタ、エディタ、コンパイラを全て内蔵しています。 以下一覧表で述べ切れなかった事項について簡単に解説します。 コマンド一覧と共にご覧ください。 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓        モニタについて Wコマンドにおける実行開始番地とは ROM内のモニタの「LOAD」コマンドで 読み込んだ際のオートスタートの番地であり、 オートスタートさせたくない場合は省略して下さい。 もちろんこのTL/1・MZ自身をこのコマンドでセ−ブして、 オートスタートテープを作ることも可能です。 またROM内のモニタへ飛びたい場合は単にG[CR]として下さい。 単なるデータのロードはこの状態で実行し、 GOTO$1202 でウォームエントリすれば良いのです。 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓       エディタについて このエディタでは、テキストエンドが RAMエンドを超えたのかチェックを行なっていません。 これは32K以上のシステムでは問題とはなりませんが、 20Kシステムでは、 Qコマンドで確かめながらエディットして下さい。 Bコマンドも有効に活用して テキストとオブジェクトをうまく配分して下さい。 またRAMエンド付近にはスタックがありますので 充分余裕を持たせて下さい。 A、Rコマンドでは 行番号のレンジチェックを行っていませんので、 あまり特種な使い方はしない様にお願いします。 Bコマンドの説明中「最終番地」とは 簡単に言うと「00」と「負の数」が 連続して現われるシーケンスを言います(実際はもっと複雑)。 通常のテキストでは このシーケンスはテキストエンド以外には存在しません。 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓      コンパイラについて X、Wコマンドは 必ずコンパイルが正しく終了してから行って下さい。 オブジェクトは実行を終了すると、 TL/1システムが存在する(と思われる)場合は ウォームエントリへ、 そうでない場合はROM内のモニタへジャンプします。 WコマンドはモニタのWコマンドと似ていますが、 書式が違いますので注意して下さい。 Wコマンド作成されテープは ROM内のモニタの「LOAD」コマンドで読み込まれ、 即実行されます。 オブジェクトはシステムがなくても動きますが、 注意して欲しいのは、 オブジェクト実行時のスタックが、 コンパイル時のRAMエンドに設定されるという事です。 つまり48Kのシステムでコンパイルされたオブジェクトは 32Kシステムでは動かないのです。(この逆は可能) この場合は32Kシステムでコンパイルしなおすか、 2801番地から2Byteを 適当な(小さな)値にモニタを使って書き換えるかして下さい。 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓       入出力について 画面に対する出力は、ブランキングチェックをはずしてあります。 この為画面に多少ノイズが出ますが、 表示速度の差を考えれば充分納得がゆくでしょう。 MZの特長の一つでもある、 カーソルコントロールキャラクタも使用可能です。 TL/1・MZにはこのほかに、 CURSOR(X,Y)という手続きも組み込まれている為、 双方の特長を生かしたプログラミングが出来ます。 カーソルコントロールキャラクタは「”」の内で主に使われますが、 「’」で囲んで文字定数としても使えます。 これは、INSERTを1回押してから カーソル移動キーを押せば入力されます。 例えば次の二つの文は同じ働きをします。  ◎WRITE(0:”[C]”)  ◎WRITE(0:ASCII(”[C]”)) ・―――――――――――――――――――――――――――――――――――――・ |         TL/1 MZ エラーメッセージ            | |―――――――――――――――――――――――――――――――――――――| |TOOMANY IDENTIFILES |IDテーブルがオーバーフローした。         | |――――――――――+――――――――――――――――――――――――――| |TOOMANY VARIABLES |変数、配列の総数が多すぎる。            | |――――――――――+――――――――――――――――――――――――――| |OBJECT TOO LONG |オブジェクトプログラムが長くなりすぎた。      | |――――――――――+――――――――――――――――――――――――――| |DIV BY ZERO |0で割ろうとした。                 | |――――――――――+――――――――――――――――――――――――――| |STRING NOT CLOSED |ストリングを”でとじる前にファイルエンドがでた。  | ・―――――――――――――――――――――――――――――――――――――・ ・―――――――――――――――――――――――――――――――――――――・ |         TL/1 MZ ライブラリ機能             | |―――――――――――――――――――――――――――――――――――――| |                 文                   | |―――――――――――――――――――――――――――――――――――――| |SET(X,Y)  座標(X,Y)のグラフィックエレメント を点灯する。(0≦X≦79、0≦Y≦49)| |RESET(X,Y)  座標(X,Y)のグラフィックエレメント を消灯する。(     〃     )| |INVERSE(X,Y) 座標(X,Y)のグラフィックエレメントの状態を反転する。(    〃   )| |CURSOR(X,Y)  カーソル を(X,Y)の位置に移動する。(0≦X≦39、0≦Y≦24)   | |―――――――――――――――――――――――――――――――――――――| |            関         数              | |―――――――――――――――――――――――――――――――――――――| |POINT(X,Y) 座標(X,Y)のグラフィックエレメント の状態を調べ点灯していればTRUE  | |      消灯していればFALSEを帰す。(0≦X≦79、0≦Y≦49)   | |―――――――――――――――――――――――――――――――――――――| |            そ    の    他              | |―――――――――――――――――――――――――――――――――――――| |WRITE(l:出力項目リスト)                          | |READ、RDHXの入力時で1文字消去にDELキーが使える            | ・―――――――――――――――――――――――――――――――――――――・  TL/1 MZ メモリマップ ・――――――――――――――――――――――・ |0000|                 | |    |       ROM       | |    |                 | |1000|―――――――――――――――――| |    |   WORK   AREA   | |1200|―――――――――――――――――| |    |     MONITOR     | |    |     EDITOR      | |    |     COMPLEIR    | |2800|―――――――――――――――――| |    |     RUNTIME     | |2A8C|―――――――――――――――――| |    |                 | |    |     OBJECT      | |    |                 | |    |……………………………………………| |    |                 | |    |     SOURCE      | |    |                 | |    〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 |    〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 |    |   1st             | |    |   2nd             | |RAM END |   Proc adrs.tablr       | ・――――――――――――――――――――――・ ・―――――――――――――――――――――――――――――――――――――・ |            MONITOR COMMAND          | |―――――――――――――――――――――――――――――――――――――| |Ma[,l,b] |a番地からb番地まで表示する。                | |     |Ma[CR]とするとa番地から16byte表示、            | |     |[CR]とするとa番地から最後まで(実際は0番地まで)表示する。  | |     |表示は、SHIFT−BREAKで中断され、SPACE で一時停止する。    | |     |この状態からは3種類の抜け出し方がある。           | |     |1つはSHIFT−BREAKによる中断、                | |     |次にSPACE を一瞬たたく事による表示再開、           | |     |最後はSPACE を長く押し続ける事による一行づつの表示である。  | |―――――+―――――――――――――――――――――――――――――――| |:a b c d…|a番地から順にb、c………を書き込む。            | |     |データの数はラインバッファの長さが許す限り書ける。      | |     |このコマンドを実行すると                   | |     |次に書き込まれるべき番地を表示して入力待ちとなる       | |     |これによって連続した番地に書き込むこが容易となる       | |     |Mコマンドによる出力はスクリーンエディトに適する様な     | |     |形式になっているので、充分活用されたい。           | |―――――+―――――――――――――――――――――――――――――――| |Ga    |a番地からのプログラムをサブルーチンコールする。       | |     |                               | |Da    |aを10進変換し表示する                    | |     |                               | |Hn    |nを16進変換し表示する                    | |―――――+―――――――――――――――――――――――――――――――| |Wf,a,b[,c]|a番地からb番地までc番地を実行開始番地として、       | |     |fというファイルネームを付けてテープにセーブする。      | |―――――+―――――――――――――――――――――――――――――――| |Ia    |a番の入力ポートの値を表示する。               | |―――――+―――――――――――――――――――――――――――――――| |Oa,b,c  |a番の出入力ポートにbを書き込む。              | |―――――+―――――――――――――――――――――――――――――――| |Ta,b,c  |a番地からb番地までc番地から始まる番地に移す。       | |―――――――――――――――――――――――――――――――――――――| |            EDITOR COMMAND           | |―――――――――――――――――――――――――――――――――――――| |0     |テキストを表示する。 表示、中断はMコマンドと同じ。     | |―――――+―――――――――――――――――――――――――――――――| |l/    |l番からのテキストを表示する。 表示、中断はMコマンドと同じ。| |l     | テキスト中のl番の文を削除する。              | |―――――+―――――――――――――――――――――――――――――――| |ls    |sにlという文番号をつけ、テキストエリアに格納する。     | |―――――+―――――――――――――――――――――――――――――――| |A[l][,k] |l番からkの増分で自動行番号機能を起動する。         | |     |SHIFT−BREAKで抜ける。                    | |     |l,kを省略するとそれぞれ1000,10になる。          | |―――――+―――――――――――――――――――――――――――――――| |R[l][,k] |現在のテキストの行番号をl番を始めとするkの増分のものに換える| |     |パラメータの省略はAコマンドと同じ。             | |―――――+―――――――――――――――――――――――――――――――| |NEW    |テキストをクリアする。                    | |―――――+―――――――――――――――――――――――――――――――| |Q     |テキストの開始番地、終了番地、RAMの最終番地をこの順に表示する。| |―――――+―――――――――――――――――――――――――――――――| |B[a]   |テキストの開始番地をaとして、最終番地を正しくセットする。  | |     |aを省略すると開始番地を変更せずに最終番地をセットする。   | |     |(GAMEの「=」コマンドと同じ。)             | |―――――+―――――――――――――――――――――――――――――――| |Fs    |テキスト中でsを含む行を表示する。              | |     |一行に2つ以上含む場合はあるだけ表示する。          | |     |中断、停止はMコマンドと同じ。                | |―――――+―――――――――――――――――――――――――――――――| |Sf    |テキストをfのファイル名でテープにセーブする。        | |―――――+―――――――――――――――――――――――――――――――| |L[f]   |テープからfのファイル名のテキストを             | |     |現在のテキスト最終番地からロード(アペンド)する       | |     |アペンドしたくないときは、NEW コマンドでテキストを空にしておく| |     |fを省略すると最初にみつけたファイルを読み込む。       | |     |アペンド終了後に最終番地をセットし              | |     |1000から10のきざみでリナンバーする              | |―――――+―――――――――――――――――――――――――――――――| |C     |テキストをコンパイルする。                  | |―――――+―――――――――――――――――――――――――――――――| |X     |オブジェクトを実行する。                   | |―――――+―――――――――――――――――――――――――――――――| |W[f]   |オブジェクトをfのファイルネームでテープにセーブする。    | |―――――――――――――――――――――――――――――――――――――| |(注)「[」、「]」で囲んだパラメーターは省略が可。            | |   n、mは0〜 65535の10進数、                     | |   l、kは1〜 32767の10進数、                     | |   a、b、c は0からFFFFの16進数、                   | |   s は文字列、                            | |   fは「,」を含まない最大16文字までの文字列を表す。          | |   数は有効桁全てを打ち込む必要は無く、あふれは無視される。      | ・―――――――――――――――――――――――――――――――――――――・ ・――――――――――――――――――――――――・ |TL/1で書いた汎用ダンプリストプログラム   | |――――――――――――――――――――――――| | VAR ADRSH,ADRSL,ENDH,STRTH,DATA,SUM,I,J | | BEGIN | | WRITE(0:"START ADDRESS HIGH BYTE ") | | STRTH:=RDHEX(0) | | WRITE(0:CRLF) | | WRITE(0:"END ADDRESS HIGH BYTE ") | | ENDH:=RDHEX(0) | | WRITE(0:CRLF) | | FOR ADRSH:=STRTH TO ENDH DO BEGIN | | ADRSL:=0 | | FOR I:=0 TO 31 DO BEGIN | | WRITE(0:SPACE(2),HEX(ADRSH),HEX(ADRSL)) | | SUM:=ADRSH+ADRSL | | FOR J:=0 TO 7 DO BEGIN | | DATA:=MEM(ADRSH,ADRSL) | | SUM:=SUM+DATA | | WRITE(0:SPACE(1),HEX(DATA)) | | ADRSL:=ADRSL+1 | | END | | WRITE(0:SPACE(2),HEX(SUM),CRLF) | | END | | END | | END | ・――――――――――――――――――――――――・